package cn.kpi.service.lawassessment.impl;

import cn.kpi.dao.lawassessment.LawAssTemplateDao;
import cn.kpi.entity.lawassessment.LawAssTempCreateIndexEntity;
import cn.kpi.entity.lawassessment.LawAssTemplateEntity;
import cn.kpi.entity.lawassessment.LawAssTemplateIndexEntity;
import cn.kpi.entity.lawassessment.LawAssTemplateOrgEntity;
import cn.kpi.service.lawassessment.ILawAssTemplateService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;

import java.util.List;
import java.util.Map;

/**
 * 法律绩效模板服务
 *
 * @author lex
 * @create 2018-06-17-21:33
 */
@Service
public class LawAssTemplateService implements ILawAssTemplateService {

    @Autowired
    private LawAssTemplateDao lawAssTemplateDao;

    public List<LawAssTemplateIndexEntity> GetTemplateIndexListRowSpan() throws Exception {
        try {
            return lawAssTemplateDao.GetTemplateIndexListRowSpan();

        } catch (Exception ex) {
            ex.printStackTrace();
            return null;
        }
    }

    @Override
    public List<LawAssTemplateEntity> GetLawAssTemplateListByWhere(String where) throws Exception {
        try {
            return lawAssTemplateDao.GetLawAssTemplateListByWhere(where);

        } catch (Exception ex) {
            ex.printStackTrace();
            return null;
        }
    }

    @Override
    public int GetLawAssTemplateListCountByWhere(String where) throws Exception {
        try {
            return lawAssTemplateDao.GetLawAssTemplateListCountByWhere(where);

        } catch (Exception ex) {
            ex.printStackTrace();
            return -1;
        }
    }

    @Override
    public List<LawAssTemplateIndexEntity> GetTemplateIndexListByWhere(String where) throws Exception {
        try {
            return lawAssTemplateDao.GetTemplateIndexListByWhere(where);

        } catch (Exception ex) {
            ex.printStackTrace();
            return null;
        }
    }

    @Override
    public LawAssTemplateIndexEntity GetIndexById(Long assindexid) throws Exception {
        try {
            return lawAssTemplateDao.GetIndexById(assindexid);
        } catch (Exception ex) {
            ex.printStackTrace();
            return null;
        }
    }

    public List<LawAssTempCreateIndexEntity> GetIndexListByWhere(String where) throws Exception {
        try {
            return lawAssTemplateDao.GetIndexListByWhere(where);
        } catch (Exception ex) {
            ex.printStackTrace();
            return null;
        }
    }

    public int UpdateIndex(LawAssTemplateIndexEntity entity) throws Exception {
        try {
            return lawAssTemplateDao.UpdateIndex(entity);
        } catch (Exception ex) {
            ex.printStackTrace();
            return -1;
        }
    }

    @Transactional
    public int InsertTemplateIndexentity(LawAssTemplateIndexEntity entity) throws Exception {
        try {
            int result = 0;
            if (entity.getParentid() > 0) {
                result += lawAssTemplateDao.UpdateParentscore(entity.getParentid(), entity.getScore());
            }
            result += lawAssTemplateDao.InsertTemplateIndexentity(entity);
            return result;

        } catch (Exception ex) {
            ex.printStackTrace();
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
            return -1;
        }
    }

    @Transactional
    public int DeleteIndex(Long assindexid, Long parentid) throws Exception {
        try {
            int result = 0;
            int score = GetIndexById(assindexid).getScore();
            result += lawAssTemplateDao.UpdateParentscore(parentid, (0 - score));
            result += lawAssTemplateDao.DeleteIndex(assindexid, parentid);
            return result;
        } catch (Exception ex) {
            ex.printStackTrace();
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
            return -1;
        }
    }

    @Transactional
    public int DeleteLawTempEntity(Long templateid) throws Exception {
        try {
            int result = lawAssTemplateDao.DeleteLawTempCreateIndexEntity(templateid);
            result += lawAssTemplateDao.DeleteLawTempEntity(templateid);
            result += lawAssTemplateDao.DeleteLawTempOrgBatch(templateid);
            if (result <= 0) {
                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();//回滚事物
                return -1;
            }
            return result;

        } catch (Exception ex) {
            ex.printStackTrace();
            return -1;
        }
    }

    public LawAssTemplateEntity GetLawAssTemplateListById(Long templateid) throws Exception {
        try {
            return lawAssTemplateDao.GetLawAssTemplateListById(templateid);

        } catch (Exception ex) {
            ex.printStackTrace();
            return null;
        }
    }

    @Override
    public List<LawAssTemplateOrgEntity> GetTempOrgListByTempId(Long templateid) {
        try {
            return lawAssTemplateDao.GetTempOrgListByTempId(templateid);
        } catch (Exception ex) {
            ex.printStackTrace();
            return null;
        }
    }

    @Override
    public int InsertLawTempOrgBatch(Long itemids, List<Long> orgids) throws Exception {
        try {
            lawAssTemplateDao.DeleteLawTempOrgBatch(itemids);
            int result = lawAssTemplateDao.InsertLawTempOrgBatch(itemids, orgids);
            if (result <= 0) {
                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();//回滚事物
                return -1;
            }
            return result;

        } catch (Exception ex) {
            ex.printStackTrace();
            return -1;
        }
    }

    @Override
    public int DeleteLawTempOrgBatch(Long templateid) {
        try {
            int result = 0;
            int score = lawAssTemplateDao.DeleteLawTempOrgBatch(templateid);
            return result;
        } catch (Exception ex) {
            ex.printStackTrace();
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
            return -1;
        }
    }

    @Override
    public List<LawAssTempCreateIndexEntity> GetTemplateIndexBytemplateid(Long templateid) throws Exception {
        try {
            return lawAssTemplateDao.GetTemplateIndexBytemplateid(templateid);

        } catch (Exception ex) {
            ex.printStackTrace();
            return null;
        }
    }

    @Override
    public List<LawAssTemplateOrgEntity> GetChooseOrgListByTempId(Long templateid) {
        try {
            return lawAssTemplateDao.GetChooseOrgListByTempId(templateid);

        } catch (Exception ex) {
            ex.printStackTrace();
            return null;
        }
    }

    @Override
    public int updateSubmit(Long templateid, int issubmit) {
        try {
            return lawAssTemplateDao.updateSubmit(templateid, issubmit);

        } catch (Exception ex) {
            ex.printStackTrace();
            return 0;
        }
    }

    @Override
    public List<Map> getWeight(String where) {
        try {
            List<Map> list = lawAssTemplateDao.getWeights(where);
            return list;
        } catch (Exception ex) {
            return null;
        }

    }

    @Override
    public int UpdateTName(LawAssTemplateEntity lawAssTemplateEntity) {
        return lawAssTemplateDao.updateTName(lawAssTemplateEntity);
    }


    public List<LawAssTemplateIndexEntity> GetTemplateIndexListRowSpanByTempId(Long templateid) throws Exception {
        try {
            return lawAssTemplateDao.GetTemplateIndexListRowSpanByTempId(templateid);

        } catch (Exception ex) {
            ex.printStackTrace();
            return null;
        }
    }

    @Transactional
    public int CreateTemplateAndIndex(List<LawAssTempCreateIndexEntity> lst, LawAssTemplateEntity entity) throws Exception {
        try {
            int result = lawAssTemplateDao.InsertTemplateEntity(entity);
            Long tempid = entity.getTemplateid();
            for (int i = 0; i < lst.size(); i++) {
                lst.get(i).setTemplateid(tempid);
            }
            result += lawAssTemplateDao.InsertTempCreateIndexBatch(lst);
            if (result <= 0) {
                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();//回滚事物
                return -1;
            }
            return result;

        } catch (Exception ex) {
            ex.printStackTrace();
            return -1;
        }
    }

    @Transactional
    public int UpdateLawAssTempEntity(List<LawAssTempCreateIndexEntity> lst, LawAssTemplateEntity entity) throws Exception {
        try {
            int result = lawAssTemplateDao.UpdateLawAssTempEntity(entity);
            result += lawAssTemplateDao.DeleteLawTempCreateIndexEntity(entity.getTemplateid());
            result += lawAssTemplateDao.InsertTempCreateIndexBatch(lst);
            if (result <= 0) {
                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();//回滚事物
                return -1;
            }
            return result;

        } catch (Exception ex) {
            ex.printStackTrace();
            return -1;
        }
    }
    //endregion
}
